題目出自 APCS 網站 > 試題範例 > 2016-03-05_實作題 > 第一題 成績指標
連結
解答僅供參考
解答:
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int n;
scanf("%d", &n);
int score[n];
for (int i = 0; i < n; i++)
{
scanf("%d", &score[i]);
}
//排序
for (int i = 0; i < n - 1; i++)
{
for (int j = i + 1; j < n; j++)
{
if (score[i] > score[j])
{
score[i] = score[i] ^ score[j];
score[j] = score[i] ^ score[j];
score[i] = score[i] ^ score[j];
}
}
}
//找出最低及格分數
int minPass = -1;
for (int i = 0; i < n; i++)
{
if (score[i] >= 60)
{
minPass = score[i];
break;
}
}
//找出最高不及格分數
int maxNoPass = -1;
for (int i = n - 1; i >= 0; i--)
{
if (score[i] < 60)
{
maxNoPass = score[i];
break;
}
}
//印出解答
for (int i = 0; i < n; i++)
{
printf("%d", score[i]);
if (i < n - 1)
{
printf(" ");
}
}
printf("\n");
if (maxNoPass == -1)
{
printf("best case\n");
}
else
{
printf("%d\n", maxNoPass);
}
if (minPass == -1)
{
printf("worst case\n");
}
else
{
printf("%d\n", minPass);
}
system("pause");
return 0;
}
說明:
一開始先簡單的將成績陣列由小到大排序,
排序過程中,有用到 XOR 運算,做位置的調換。
接著分別找出 最低及格分數
和 最高不及格分數
。
最低及格分數的找法:
從陣列前端往後找,找到大於等於60分,就將分數儲存並離開迴圈。
最高不及格分數的找法:
從陣列末端往前找,找到小於60分,就將分數儲存並離開迴圈。
這裡有運用一個技巧,因為分數皆大於等於0,
所以先將 minPass 和 maxNoPass 設為 -1,
最後就可以用 -1 來判斷是否印出 worst case 或 best case。
相關文章:
[C++][APCS] 成績指標
[C++][APCS] 矩陣轉換